// 导入axios
import axios from "axios";
import store from "@/store"
import {getTimeStamp} from "@/utils/auth"
import { Message } from "element-ui";

// 校验登录时间过期的方法
const tokenLongTime =  1000 * 10 // 设置token失效时间
const checkTimeOut = ()=>{
	// (显得时间-登录的时间)> token过期的时长  即token过期
	let loginTime = getTimeStamp()
	let nowTime = Date.now()
	return nowTime - loginTime>tokenLongTime
}

// 创建一个axios的实例
const service = axios.create({
	baseURL:process.env.VUE_APP_BASE_API, // 配置基准请求地址
}); 

// 请求拦截器(作用：携带token)
service.interceptors.request.use(
async	(config) =>{
		//如果登录上了，携带token
		const token= store.getters.token
		if(token){
			// 在这里主动判断token是否过期,过期了清除token和userInfo，退出到登录页面，重新登录
			/* if(checkTimeOut()){
				Message.error("token过期，请重新登录")
				await store.dispatch('user/quitAction')
				router.push('/login')
				return Promise.reject('token过期')
			} */
			//没有过期，就携带上token
			config.headers["Authorization"] = "Bearer " + token
		}
		return config
	},
	error=>{
		return Promise.reject(error)
	}
); 

// 响应拦截器(作用：解构数据+处理错误)
service.interceptors.response.use(
	// 请求成功的
	(response)=>{
		const {data,message,success,code} = response.data // 解构
		// 如果success是true表示业务逻辑正确，返回data；错误则抛出错误状态
		if(success) {return data} else{ return Promise.reject(message)}
	},
	// 请求失败的
  async	(error)=>{
		//token过期的被动处理方式，根据服务器端返回的数据进行处理，直接退出重新登录
		if(error.response && error.response.data && error.response.data.code===10002) {
			Message.error("token过期，请重新登录")
			await store.dispatch('user/quitAction')
			router.push('/login')
		}
		 return Promise.reject(error)
	}
	
); 

// 导出axios实例
export default service; 

